//
//  FXEmoticonCollectionView.swift
//  微博(Swift)
//
//  Created by V on 16/1/13.
//  Copyright © 2016年 V. All rights reserved.
//

import UIKit

class FXEmoticonCollectionView: UICollectionView {
    
    // MARK: - 属性
    var currentSelectedButton: UIButton?
    
    
    // MARK: -  初始化
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        super.init(frame: frame, collectionViewLayout: UICollectionViewFlowLayout())
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    // MARK: - 设置UI
    private func setupUI(){
        backgroundColor = UIColor.clearColor()
        dataSource = self
        delegate = self
        registerClass(FXEmoticonCollectionViewCell.self, forCellWithReuseIdentifier: "cell")
        // 这里取到的 layout 和下边是一个 layout
        let layout = collectionViewLayout as! UICollectionViewFlowLayout
        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 0
        layout.scrollDirection = .Horizontal
        // collectionView 的相关属性
        pagingEnabled = true
        bounces = false
        showsHorizontalScrollIndicator = false
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        // 这里取到的 layout 和上边是一个 layout
        let layout = collectionViewLayout as! UICollectionViewFlowLayout
        // 在 layoutSubviews 里边定义 itemSize 是因为要设置他的高和collectionView的高一样，collectionView的高是通过约束来设置的，如果写在外边，可能取到的height是一个空
        layout.itemSize = CGSizeMake(SCREENW, self.frame.height)
    }
}


// MARK: - 数据源方法
extension FXEmoticonCollectionView: UICollectionViewDataSource {
    
    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int{
        print(FXEmoticonTools.sharedTools.allEmoticons.count)
        return FXEmoticonTools.sharedTools.allEmoticons.count
    }
    
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        print(FXEmoticonTools.sharedTools.allEmoticons[section].count)
        return FXEmoticonTools.sharedTools.allEmoticons[section].count
    }
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! FXEmoticonCollectionViewCell
        // cell.backgroundColor = RandomColor()
        cell.indexPath = indexPath
        // 取出表情数据
        let emoticons = FXEmoticonTools.sharedTools.allEmoticons[indexPath.section][indexPath.item]
        cell.emoticons = emoticons
        return cell
    }
}



// MARK: - 代理方法
extension FXEmoticonCollectionView: UICollectionViewDelegate {
    // 监听 collectionView 滚动，判断当前滚动第几组
    func scrollViewDidScroll(scrollView: UIScrollView) {
        // 1. 获取显示出来的两个cell，比较哪个显示的多。2.取出显示的多的cell的组
        let cells = self.visibleCells()
        if cells.count == 2 {
            let firstCell = cells.first!
            let lastCell = cells.last!
            // print("_______\(firstCell.frame.origin.x)")
            // print("+++++++\(lastCell.frame.origin.x)")
            
            // 这里的 scrollView 和 self 是一个东西
            // print("==============\(scrollView.contentOffset.x)")
            // print("==============\(self.contentOffset.x)")
            
            /// 要重新理解一个概念，scrollView是一个与屏幕等高的，但是宽度是屏幕的n倍的一个View。屏幕要现实第n个Cell的时候，需要scrollView 自己移动到响应的位置，从而进行显示出来。
            /// firstCell 和 lastCell 是一直变换的，不是固定不变的两个cell
            /// offset 是从 scrollView 始端开始到屏幕的左边框
            
            // A type that supports an "absolute value" function.
            let firstW = abs(Int32(firstCell.frame.origin.x - self.contentOffset.x))
            let lastW = abs(Int32(lastCell.frame.origin.x - self.contentOffset.x))
            var indexPath = NSIndexPath()
            if firstW < lastW  {
                // 取出显示多的cell的section
                indexPath = self.indexPathForCell(firstCell)!
            }else{
                indexPath = self.indexPathForCell(lastCell)!
            }
            // 让相对应的button变成选中状态
            // 发送通知
            NSNotificationCenter.defaultCenter().postNotificationName(FXEmoticonButtonSelectedNotification, object: indexPath)
        }
    }
}